package top.zackyoung.springboot.config

import com.alibaba.fastjson.serializer.SerializerFeature
import com.alibaba.fastjson.support.config.FastJsonConfig
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter
import org.springframework.boot.autoconfigure.http.HttpMessageConverters
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.MediaType
import org.springframework.http.converter.HttpMessageConverter

@Configuration
open class KotlinFastjsonConfig {
    @Bean
    open fun fastJsonHttpMessageConverters(): HttpMessageConverters? {
        // 1.定义一个converters转换消息的对象
        val fastConverter = FastJsonHttpMessageConverter()
        // 2.添加fastjson的配置信息，比如: 是否需要格式化返回的json数据
        val fastJsonConfig = FastJsonConfig()
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,
            SerializerFeature.WriteMapNullValue,
            SerializerFeature.DisableCircularReferenceDetect)
        // 中文乱码解决方案
        val mediaTypes: MutableList<MediaType> = ArrayList()
        // 设定json格式且编码为UTF-8
        mediaTypes.add(MediaType.APPLICATION_JSON_UTF8)
        fastConverter.supportedMediaTypes = mediaTypes
        // 3.在converter中添加配置信息
        fastConverter.fastJsonConfig = fastJsonConfig
        // 4.将converter赋值给HttpMessageConverter
        // 5.返回HttpMessageConverters对象

        //BigDecimal格式化
        //设置我们自定义的 BigDecimalValueFilter
        fastJsonConfig.setSerializeFilters(BigDecimalValueFilter())
        return HttpMessageConverters(fastConverter as HttpMessageConverter<*>)
    }
}